package gui;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JDialog;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

import modelo.Interpol;
import modelo.Juego;
import modelo.Ladron;
import modelo.Rasgos;

import javax.swing.JButton;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.util.Iterator;
import java.util.List;

public class JDialogOrdenDeArresto extends JDialog {
	
	private static final long serialVersionUID = 1L;
	private Juego juego;
	private JComboBox<Rasgos.Sexo> comboBoxSexo;
	private JComboBox<Rasgos.Cabello> comboBoxSCabello;
	private JComboBox<Rasgos.Hobby> comboBoxHobby;
	private JComboBox<Rasgos.Senia> comboBoxSenia;
	private JComboBox<Rasgos.Vehiculo> comboBoxVehiculo;

	
	public JDialogOrdenDeArresto(Juego juego) {
		setResizable(false);
		this.juego=juego;
		setBounds(100, 100, 319, 344);
		getContentPane().setLayout(null);
		
		this.cargarLabels();
		
		cargarComboBoxes();
		
		JButton btnEmitirOrdenDeArresto = new JButton("Emitir Orden de Arresto");
		btnEmitirOrdenDeArresto.setBounds(62, 236, 185, 23);
		getContentPane().add(btnEmitirOrdenDeArresto);
		
		JButton btnAceptar = new JButton("Aceptar y Salir");
		btnAceptar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnAceptar.setBounds(62, 270, 185, 23);
		getContentPane().add(btnAceptar);
		btnEmitirOrdenDeArresto.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				JDialogOrdenDeArresto.this.generarOrdenDeArresto();
			}
		});
	}

	protected void generarOrdenDeArresto() {
		Interpol interpol=new Interpol();
		List<Ladron> sospechosos;
		sospechosos=interpol.obtenerSospechosos(juego.getPolicia());
		
		if(sospechosos.size()==1){
			JOptionPane.showMessageDialog(this, "Orden de arresto emitida contra: "+sospechosos.get(0).getNombre());
		}
		else if(sospechosos.size()==0){
			JOptionPane.showMessageDialog(this, "No hubo ninguna coincidencia en las base de datos de interpol");
		}
		else{
			Iterator<Ladron> itLadron = sospechosos.iterator();
			String nombreDeSospechosos="";
			String nl = System.getProperty("line.separator");
			while (itLadron.hasNext()){
				Ladron unSospechoso = itLadron.next();
				nombreDeSospechosos+=unSospechoso.getNombre()+nl;
			}
			
			JOptionPane.showMessageDialog(this, "Se han encontrado multiples coincidencias:"+nl+ nombreDeSospechosos);
		}
		this.setVisible(false);
		this.dispose();
	}

	protected void cargarComboBoxes() {
		
		comboBoxSexo = new JComboBox<Rasgos.Sexo>();
		comboBoxSexo.setModel(new DefaultComboBoxModel<Rasgos.Sexo>(Rasgos.Sexo.values()));
		comboBoxSexo.setBounds(148, 28, 99, 20);
		comboBoxSexo.setSelectedItem(this.juego.getPolicia().getSospechoso().getSexo());
		getContentPane().add(comboBoxSexo);
		comboBoxSexo.addItemListener(new ItemListener() {
			public void itemStateChanged(ItemEvent e) {
				JDialogOrdenDeArresto.this.guardarSexo();			
			}
		});
		
		
		comboBoxSCabello = new JComboBox<Rasgos.Cabello>();
		comboBoxSCabello.setModel(new DefaultComboBoxModel<Rasgos.Cabello>(Rasgos.Cabello.values()));
		comboBoxSCabello.setBounds(148, 68, 99, 20);
		comboBoxSCabello.setSelectedItem(this.juego.getPolicia().getSospechoso().getCabello());
		getContentPane().add(comboBoxSCabello);
		comboBoxSCabello.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent arg0) {
				JDialogOrdenDeArresto.this.guardarRasgoCabello();
			}
		});
		
		comboBoxHobby = new JComboBox<Rasgos.Hobby>();
		comboBoxHobby.setModel(new DefaultComboBoxModel<Rasgos.Hobby>(Rasgos.Hobby.values()));
		comboBoxHobby.setBounds(148, 108, 99, 20);
		comboBoxHobby.setSelectedItem(this.juego.getPolicia().getSospechoso().getHobby());
		getContentPane().add(comboBoxHobby);
		comboBoxHobby.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				JDialogOrdenDeArresto.this.guardarRasgoHobby();
			}
		});
		
		comboBoxSenia = new JComboBox<Rasgos.Senia>();
		comboBoxSenia.setModel(new DefaultComboBoxModel<Rasgos.Senia>(Rasgos.Senia.values()));
		comboBoxSenia.setBounds(148, 148, 99, 20);
		comboBoxSenia.setSelectedItem(this.juego.getPolicia().getSospechoso().getSenia());
		getContentPane().add(comboBoxSenia);
		comboBoxSenia.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				JDialogOrdenDeArresto.this.guardarRasgoSenia();
			}
		});
		
		comboBoxVehiculo = new JComboBox<Rasgos.Vehiculo>();
		comboBoxVehiculo.setModel(new DefaultComboBoxModel<Rasgos.Vehiculo>(Rasgos.Vehiculo.values()));
		comboBoxVehiculo.setBounds(148, 188, 99, 20);
		comboBoxVehiculo.setSelectedItem(this.juego.getPolicia().getSospechoso().getVehiculo());
		getContentPane().add(comboBoxVehiculo);
		comboBoxVehiculo.addItemListener(new ItemListener() {
			
			@Override
			public void itemStateChanged(ItemEvent e) {
				JDialogOrdenDeArresto.this.guardarRasgoVehiculo();
			}
		});
	}
	
	protected void guardarRasgoVehiculo(){
		Rasgos.Vehiculo VehiculoDelSospechoso=(Rasgos.Vehiculo)this.comboBoxVehiculo.getSelectedItem();
		this.juego.getPolicia().getSospechoso().setVehiculo(VehiculoDelSospechoso);
		
	}
	
	protected void guardarRasgoSenia(){
		Rasgos.Senia SeniaDelSospechoso=(Rasgos.Senia)this.comboBoxSenia.getSelectedItem();
		this.juego.getPolicia().getSospechoso().setSenia(SeniaDelSospechoso);
	}
	
	protected void guardarRasgoHobby(){
		Rasgos.Hobby HobbyDelSospechoso=(Rasgos.Hobby)this.comboBoxHobby.getSelectedItem();
		this.juego.getPolicia().getSospechoso().setHobby(HobbyDelSospechoso);
	}
	
	protected void guardarRasgoCabello() {
		Rasgos.Cabello cabelloDelSospechoso=(Rasgos.Cabello)this.comboBoxSCabello.getSelectedItem();
		this.juego.getPolicia().getSospechoso().setCabello(cabelloDelSospechoso);
	}

	protected void guardarSexo() {
		Rasgos.Sexo sexoDelSospechoso=(Rasgos.Sexo)this.comboBoxSexo.getSelectedItem();
		this.juego.getPolicia().getSospechoso().setSexo(sexoDelSospechoso);
	}

	protected void cargarLabels() {
		JLabel lblSexo = new JLabel("Sexo:");
		lblSexo.setBounds(62, 30, 76, 14);
		getContentPane().add(lblSexo);
		
		JLabel lblCabello = new JLabel("Cabello:");
		lblCabello.setBounds(62, 71, 76, 14);
		getContentPane().add(lblCabello);
		
		JLabel lblHobbie = new JLabel("Hobbie:");
		lblHobbie.setBounds(62, 111, 76, 14);
		getContentPane().add(lblHobbie);
		
		JLabel lblSenia = new JLabel("Senia:");
		lblSenia.setBounds(62, 151, 76, 14);
		getContentPane().add(lblSenia);
		
		JLabel lblVehiculo = new JLabel("Vehiculo:");
		lblVehiculo.setBounds(62, 191, 76, 14);
		getContentPane().add(lblVehiculo);
	}
}
